home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
src
/
Tools
/
pidentd
/
pidentd-2.6.1
/
testdir
/
test1.c
< prev
Wrap
C/C++ Source or Header
|
1995-07-30
|
3KB
|
147 lines
/*
** A small test program. If run without any arguments, it should
** return *your* user name if the machine it is run on has a correctly
** installed and running Ident server.
**
** Last modified: 11 August 1993 by Michael Kuch
**
** Author: Peter Eriksson <pen@lysator.liu.se>
*/
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <ctype.h>
int Toupper(c)
int c;
{
if (islower(c))
return toupper(c);
else
return c;
}
/*
** Compare two strings, case insensitive
*/
int Stricmp(s1, s2)
char *s1, *s2;
{
int diff;
while (!(diff = Toupper(*s1) - Toupper(*s2)) && *s1)
s1++, s2++;
return diff;
}
Perror(str)
char *str;
{
perror(str);
exit(1);
}
main(argc,argv)
int argc;
char *argv[];
{
int fd;
struct sockaddr_in addr;
int addrlen;
int port;
FILE *fp_in, *fp_out;
int lport, fport;
char buffer[8192];
char *cp;
char reply_type[81];
char opsys_or_error[81];
char identifier[1024];
if (argc > 3)
{
printf("usage: %s [{host-ip-number} [{port number}]]", argv[0]);
exit(1);
}
fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd == -1)
Perror("socket");
addr.sin_family = AF_INET;
if(argc > 1)
addr.sin_addr.s_addr = inet_addr(argv[1]);
else
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (argc > 2)
port = atoi(argv[2]);
else
port = 113;
addr.sin_port = htons(port);
addrlen = sizeof(addr);
if (connect(fd, &addr, addrlen) == -1)
Perror("connect");
addrlen = sizeof(addr);
if (getsockname(fd, &addr, &addrlen) == -1)
Perror("getsockname");
fp_in = fdopen(fd, "r");
fp_out = fdopen(fd, "w");
if (!fp_in || !fp_out)
Perror("fdopen");
fprintf(fp_out, "%d , %d\n", ntohs(addr.sin_port), port);
fflush(fp_out);
if (fgets(buffer, sizeof(buffer)-1, fp_in) == NULL)
Perror("fgets");
shutdown(fd, 1);
cp = buffer;
while (*cp != 0 && (*cp < ' ' || isspace(*cp)))
++cp;
argc = sscanf(cp, "%d , %d : %[^ \t\n\r:] : %[^\t\n\r:] : %[^\n\r]",
&lport, &fport, reply_type, opsys_or_error, identifier);
if (argc < 3)
{
fprintf(stderr, "sscanf: too few arguments (%d)\n", argc);
exit(1);
}
if (Stricmp(reply_type, "ERROR") == 0)
{
printf("Ident error: error code: %s\n", opsys_or_error);
exit(1);
}
else if (Stricmp(reply_type, "USERID") != 0)
{
printf("Ident error: illegal reply type: %s\n", reply_type);
exit(1);
}
else
printf("Ident returned:\n");
printf("\tOpsys and Charset (if -c specified for identd) = %s\n",
opsys_or_error);
printf("\tIdentifier: %s\n", identifier);
fclose(fp_out);
fclose(fp_in);
exit(0);
}